package cn.itcast.nems.studentrecord.dto;

import cn.itcast.nems.common.QueryParam;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 学员信息转换类
 * @author ChangLu.Gao
 * @version v1.0
 * @program nems-server
 * @description 学员信息转换类
 * @date 2023/11/14 11:21
 */
@Data
public class StudentRecordDTO implements QueryParam, Serializable {
    /**
     * 学籍编号
     */
    private String id ;
    /**
     * 姓名
     */
    private String name;
    /**
     * 学籍来源;枚举值：新报名｜NEW、升班｜RENEWAL、转班来｜TRANSFER、休学归来｜SUSPENSION、出待定班｜DELAY
     */
    private String source;
    /**
     * 缴费状态  CREATE("创建订单"), PART_PAID("部分支付"), ALL_PAID("完成支付"), ORDER_CANCEL("订单取消"),INVOICED("开取收据") ;
     */
    private String orderType;
    /**
     * 缴费状态  0|未完成缴费、1|已完成缴费
     */
    private Integer paidState ;
    /**
     * 班级ID
     */
    private Integer clazzId;
    /**
     * 状态
     */
    private String state;
    /**
     * 优惠金额总额
     */
    private Double discountAmount;
    /**
     * 应付金额
     */
    private Double amountDue;
    /**
     * 实际应付
     */
    private BigDecimal actualAmountDue;

    /**
     * 转班转入金额;注：来自转班凭单，由其他学籍转进来金额。
     */
    private BigDecimal transferFromAmount;
    /**
     * 已付金额
     */
    private Double paidAmount;
    /**
     * 应付余额
     */
    private Double payableBalance;
    /**
     * 唯一code；为保护学籍ID不泄漏，主要用于该学籍统一的支付链接
     */
    private String uniqueCode;
    /**
     * 班级名称
     */
    private String clazzName;
    /**
     * 性别
     */
    private String gender;
    /**
     * 学员ID
     */
    private Integer studentId;
    /**
     * 学号
     */
    private String studentNo;
    /**
     * 校区ID
     */
    private String schoolId ;
    /**
     * 校区名称
     */
    private String schoolName  ;
    /**
     * 学科ID
     */
    private String subjectId ;
    /**
     * 所在班级的学科名称
     */
    private String subjectName;
    /**
     * 开班日期
     */
    private LocalDate startDate;
    /**
     * 当前所在班级的预计结课日期
     */
    private LocalDate predictionGraduationDate;
    /**
     * 执行价格
     */
    private BigDecimal price;
    /**
     * 学籍操作锁;枚举值：0｜无锁、1｜已上锁；场景：处于升班场景中的学籍，不允许再办理转班等其他操作。
     */
    private Byte lockFlag;
    /**
     * 出班结算日期;退学、转班、进待定班、结课等出班的操作都应记录该值。
     */
    private LocalDateTime settlementDate;

    /**
     * 出班结算原因;中文描述。如：转班、休学、进待定班、结课等
     */
    private String settlementReason;
    /**
     * 进班日期
     */
    private LocalDate inDate;
    /**
     * 退费金额
     */
    private Double refundAmount;
    /**
     * 转出金额 = SUM(费用转出金额) + 转班转出金额；转班转出金额 = 已付金额 + 转入金额 - SUM(费用转出金额) - 退费金额 - 课耗金额（在转班相关凭单审批通过时计算，不可为负数，负数时该值为0）
     */
    private Double transferOutAmount;
    /**
     * 关联学籍ID;记录该学籍来源的上一个学籍ID。比如升班时记录基础班学籍ID，转班时记录转班来源的学籍ID等
     */
    private String associatedRecordId;
}
